using System;
using EnvDTE;

namespace NUnitGenAddIn.Core.Test
{
    /// <summary>
    /// Mock DTE
    /// </summary>
	public class MockDTE : DTE
	{
		private object _result;
		private Document _activeDocument;

        /// <summary>
        /// Gets the result.
        /// </summary>
        /// <value>The result.</value>
		public object Result
		{
			get { return _result; }
		}

        /// <summary>
        /// Sets the active document.
        /// </summary>
        /// <param name="value">The value.</param>
		public void SetActiveDocument(Document value)
		{
			_activeDocument = value;
		}

		#region _DTE Members

        /// <summary>
        /// Gets the active document.
        /// </summary>
        /// <value>The active document.</value>
		public virtual Document ActiveDocument
		{
			get { return _activeDocument; }
		}

        /// <summary>
        /// Gets the active solution projects.
        /// </summary>
        /// <value>The active solution projects.</value>
		public object ActiveSolutionProjects
		{
			get { throw new Exception("The method or operation is not implemented."); }
		}

        /// <summary>
        /// Gets the active window.
        /// </summary>
        /// <value>The active window.</value>
		public Window ActiveWindow
		{
			get { throw new Exception("The method or operation is not implemented."); }
		}

        /// <summary>
        /// Gets the add ins.
        /// </summary>
        /// <value>The add ins.</value>
		public AddIns AddIns
		{
			get { throw new Exception("The method or operation is not implemented."); }
		}

        /// <summary>
        /// Gets the application.
        /// </summary>
        /// <value>The application.</value>
		public DTE Application
		{
			get { throw new Exception("The method or operation is not implemented."); }
		}

        /// <summary>
        /// Gets the command bars.
        /// </summary>
        /// <value>The command bars.</value>
		public object CommandBars
		{
			get { throw new Exception("The method or operation is not implemented."); }
		}

        /// <summary>
        /// Gets the command line arguments.
        /// </summary>
        /// <value>The command line arguments.</value>
		public string CommandLineArguments
		{
			get { throw new Exception("The method or operation is not implemented."); }
		}

        /// <summary>
        /// Gets the commands.
        /// </summary>
        /// <value>The commands.</value>
		public Commands Commands
		{
			get { throw new Exception("The method or operation is not implemented."); }
		}

        /// <summary>
        /// Gets the context attributes.
        /// </summary>
        /// <value>The context attributes.</value>
		public ContextAttributes ContextAttributes
		{
			get { throw new Exception("The method or operation is not implemented."); }
		}

        /// <summary>
        /// Gets the DTE.
        /// </summary>
        /// <value>The DTE.</value>
		public DTE DTE
		{
			get { throw new Exception("The method or operation is not implemented."); }
		}

        /// <summary>
        /// Gets the debugger.
        /// </summary>
        /// <value>The debugger.</value>
		public Debugger Debugger
		{
			get { throw new Exception("The method or operation is not implemented."); }
		}

        /// <summary>
        /// Gets or sets the display mode.
        /// </summary>
        /// <value>The display mode.</value>
		public vsDisplay DisplayMode
		{
			get { throw new Exception("The method or operation is not implemented."); }
			set { throw new Exception("The method or operation is not implemented."); }
		}

        /// <summary>
        /// Gets the documents.
        /// </summary>
        /// <value>The documents.</value>
		public Documents Documents
		{
			get { throw new Exception("The method or operation is not implemented."); }
		}

        /// <summary>
        /// Gets the edition.
        /// </summary>
        /// <value>The edition.</value>
		public string Edition
		{
			get { throw new Exception("The method or operation is not implemented."); }
		}

        /// <summary>
        /// Gets the events.
        /// </summary>
        /// <value>The events.</value>
		public Events Events
		{
			get { throw new Exception("The method or operation is not implemented."); }
		}

        /// <summary>
        /// Executes the command.
        /// </summary>
        /// <param name="CommandName">Name of the command.</param>
        /// <param name="CommandArgs">The command args.</param>
		public void ExecuteCommand(string CommandName, string CommandArgs)
		{
			_result = "CommandName:" + CommandName + ";CommandArgs:" + CommandArgs;
		}

        /// <summary>
        /// Gets the name of the file.
        /// </summary>
        /// <value>The name of the file.</value>
		public string FileName
		{
			get { throw new Exception("The method or operation is not implemented."); }
		}

        /// <summary>
        /// Gets the find.
        /// </summary>
        /// <value>The find.</value>
		public Find Find
		{
			get { throw new Exception("The method or operation is not implemented."); }
		}

        /// <summary>
        /// Gets the full name.
        /// </summary>
        /// <value>The full name.</value>
		public string FullName
		{
			get { throw new Exception("The method or operation is not implemented."); }
		}

        /// <summary>
        /// Gets the object.
        /// </summary>
        /// <param name="name">The name.</param>
        /// <returns></returns>
		public object GetObject(string name)
		{
			throw new Exception("The method or operation is not implemented.");
		}

        /// <summary>
        /// Gets the globals.
        /// </summary>
        /// <value>The globals.</value>
		public Globals Globals
		{
			get { throw new Exception("The method or operation is not implemented."); }
		}

        /// <summary>
        /// Gets the item operations.
        /// </summary>
        /// <value>The item operations.</value>
		public ItemOperations ItemOperations
		{
			get { throw new Exception("The method or operation is not implemented."); }
		}

        /// <summary>
        /// Launches the wizard.
        /// </summary>
        /// <param name="VSZFile">The VSZ file.</param>
        /// <param name="ContextParams">The context params.</param>
        /// <returns></returns>
		public wizardResult LaunchWizard(string VSZFile, ref object[] ContextParams)
		{
			throw new Exception("The method or operation is not implemented.");
		}

        /// <summary>
        /// Gets the locale ID.
        /// </summary>
        /// <value>The locale ID.</value>
		public int LocaleID
		{
			get { throw new Exception("The method or operation is not implemented."); }
		}

        /// <summary>
        /// Gets the macros.
        /// </summary>
        /// <value>The macros.</value>
		public Macros Macros
		{
			get { throw new Exception("The method or operation is not implemented."); }
		}

        /// <summary>
        /// Gets the macros IDE.
        /// </summary>
        /// <value>The macros IDE.</value>
		public DTE MacrosIDE
		{
			get { throw new Exception("The method or operation is not implemented."); }
		}

        /// <summary>
        /// Gets the main window.
        /// </summary>
        /// <value>The main window.</value>
		public Window MainWindow
		{
			get { throw new Exception("The method or operation is not implemented."); }
		}

        /// <summary>
        /// Gets the mode.
        /// </summary>
        /// <value>The mode.</value>
		public vsIDEMode Mode
		{
			get { throw new Exception("The method or operation is not implemented."); }
		}

        /// <summary>
        /// Gets the name.
        /// </summary>
        /// <value>The name.</value>
		public string Name
		{
			get { throw new Exception("The method or operation is not implemented."); }
		}

        /// <summary>
        /// Gets the object extenders.
        /// </summary>
        /// <value>The object extenders.</value>
		public ObjectExtenders ObjectExtenders
		{
			get { throw new Exception("The method or operation is not implemented."); }
		}

        /// <summary>
        /// Opens the file.
        /// </summary>
        /// <param name="ViewKind">Kind of the view.</param>
        /// <param name="fileName">Name of the file.</param>
        /// <returns></returns>
		public Window OpenFile(string ViewKind, string fileName)
		{
			throw new Exception("The method or operation is not implemented.");
		}

        /// <summary>
        /// Quits this instance.
        /// </summary>
		public void Quit()
		{
			throw new Exception("The method or operation is not implemented.");
		}

        /// <summary>
        /// Gets the registry root.
        /// </summary>
        /// <value>The registry root.</value>
		public string RegistryRoot
		{
			get { throw new Exception("The method or operation is not implemented."); }
		}

        /// <summary>
        /// Satellites the DLL path.
        /// </summary>
        /// <param name="Path">The path.</param>
        /// <param name="name">The name.</param>
        /// <returns></returns>
		public string SatelliteDllPath(string Path, string name)
		{
			throw new Exception("The method or operation is not implemented.");
		}

        /// <summary>
        /// Gets the selected items.
        /// </summary>
        /// <value>The selected items.</value>
		public SelectedItems SelectedItems
		{
			get { throw new Exception("The method or operation is not implemented."); }
		}

        /// <summary>
        /// Gets the solution.
        /// </summary>
        /// <value>The solution.</value>
		public Solution Solution
		{
			get { throw new Exception("The method or operation is not implemented."); }
		}

        /// <summary>
        /// Gets the source control.
        /// </summary>
        /// <value>The source control.</value>
		public SourceControl SourceControl
		{
			get { throw new Exception("The method or operation is not implemented."); }
		}

        /// <summary>
        /// Gets the status bar.
        /// </summary>
        /// <value>The status bar.</value>
		public StatusBar StatusBar
		{
			get { throw new Exception("The method or operation is not implemented."); }
		}

        /// <summary>
        /// Gets or sets a value indicating whether [suppress UI].
        /// </summary>
        /// <value><c>true</c> if [suppress UI]; otherwise, <c>false</c>.</value>
		public bool SuppressUI
		{
			get { throw new Exception("The method or operation is not implemented."); }
			set { throw new Exception("The method or operation is not implemented."); }
		}

        /// <summary>
        /// Gets the undo context.
        /// </summary>
        /// <value>The undo context.</value>
		public UndoContext UndoContext
		{
			get { throw new Exception("The method or operation is not implemented."); }
		}

        /// <summary>
        /// Gets or sets a value indicating whether [user control].
        /// </summary>
        /// <value><c>true</c> if [user control]; otherwise, <c>false</c>.</value>
		public bool UserControl
		{
			get { throw new Exception("The method or operation is not implemented."); }
			set { throw new Exception("The method or operation is not implemented."); }
		}

        /// <summary>
        /// Gets the version.
        /// </summary>
        /// <value>The version.</value>
		public string Version
		{
			get { throw new Exception("The method or operation is not implemented."); }
		}

        /// <summary>
        /// Gets the window configurations.
        /// </summary>
        /// <value>The window configurations.</value>
		public WindowConfigurations WindowConfigurations
		{
			get { throw new Exception("The method or operation is not implemented."); }
		}

        /// <summary>
        /// Gets the windows.
        /// </summary>
        /// <value>The windows.</value>
		public Windows Windows
		{
			get { throw new Exception("The method or operation is not implemented."); }
		}

        /// <summary>
        /// Get_s the is open file.
        /// </summary>
        /// <param name="ViewKind">Kind of the view.</param>
        /// <param name="fileName">Name of the file.</param>
        /// <returns></returns>
		public bool get_IsOpenFile(string ViewKind, string fileName)
		{
			throw new Exception("The method or operation is not implemented.");
		}

        /// <summary>
        /// Get_s the properties.
        /// </summary>
        /// <param name="Category">The category.</param>
        /// <param name="Page">The page.</param>
        /// <returns></returns>
		public Properties get_Properties(string Category, string Page)
		{
			throw new Exception("The method or operation is not implemented.");
		}

		#endregion
	}
}